<?php

namespace app\api\controller;

use app\common\controller\Api;
use think\Db;
use think\Cache;
/**
 * 示例接口
 */
class Demo extends Api
{

    //如果$noNeedLogin为空表示所有接口都需要登录才能请求
    //如果$noNeedRight为空表示所有接口都需要验证权限才能请求
    //如果接口已经设置无需登录,那也就无需鉴权了
    //
    // 无需登录的接口,*表示全部
    protected $noNeedLogin = ['*'];
    // 无需鉴权的接口,*表示全部
    protected $noNeedRight = ['*'];

    /**
     * 测试方法
     *
     * @ApiTitle    (测试名称)
     * @ApiSummary  (测试描述信息)
     * @ApiMethod   (POST)
     * @ApiRoute    (/api/demo/test/id/{id}/name/{name})
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="id", type="integer", required=true, description="会员ID")
     * @ApiParams   (name="name", type="string", required=true, description="用户名")
     * @ApiParams   (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据")
     * @ApiReturnParams   (name="code", type="integer", required=true, sample="0")
     * @ApiReturnParams   (name="msg", type="string", required=true, sample="返回成功")
     * @ApiReturnParams   (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据返回")
     * @ApiReturn   ({
        'code':'1',
        'msg':'返回成功'
        })
     */
    public function redis()
    {
        $redis = Cache::getHandler()->handler();

        $redis->set('key', 'value');

        // 获取数据
        $value = $redis->get('key');
        echo $value . PHP_EOL;

        // 修改数据，与创建数据一致，即覆盖数据
        $redis->set('key', 'value2');
        echo $redis->get('key') . PHP_EOL;

        // 追加数据
        $redis->append('key', '_value2');
        echo $redis->get('key') . PHP_EOL;

        // 删除数据
        $redis->del('key');
        // $redis->delete('key');
        var_dump($redis->get('key'));

        // 创建数据，带有效期
        $redis->set('timeout_key', 'timeout_value', 5);
        $redis->setex('timeout_key', 5, 'timeout_value');
        // 获取数据的有效期
        echo $redis->ttl('timeout_key') . PHP_EOL;

        // 判断是否已经写入，未写入则写入
        $redis->set('unique_key', 'unique_value');
        if (!$redis->setnx('unique_key', 'unique_value')) {
            echo $redis->get('unique_key') . PHP_EOL;
        }

        // 批量创建
        $multi = ['key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3'];
        $redis->mset($multi);

        // 批量获取
        $result = $redis->mget(array_keys($multi));
        var_dump($result);


        //修改数据
        $redis->set('member','name2');
        //追加数据
        // $redis->append('member', 'name');
        // 删除数据
        // $redis->del('key1');
        // 创建 hash 表
        // 向名字叫 'hash' 的 hash表 中添加元素 ['key1' => 'val1']
        $redis->hSet('hash', 'key1', 'val1');
        dump(1);die;
        
        // 获取 hash表 中键名是 key1 的值
        // $redis->hGet('hash', 'key1');
        // 获取 hash表的元素个数
        // echo $redis->hLen('hash') . PHP_EOL;
        // 获取 hash表 中所有的键
        // $keys = $redis->hKeys('hash');
        // 获取 hash表 中所有的值
        // $vals = $redis->hVals('hash');

        // $array1['user_id'] = 53243;
        // 向队列左侧加入元素
        // $a = $redis->lPush('lists', $array1['user_id']);
        // 向队列右侧加入元素
        // $a = $redis->rPush('lists', $array1['user_id']);
        // 将索引为1的数据修改为 Y
        // $a = $redis->lSet('lists', 0, '88888');
        // 获取 list 长度
        // $length = $redis->lLen('lists');
        // echo $length;
        // 遍历 list
        // $lists = $redis->lRange('lists', 0, $length - 1);
        // 从左侧出队一个元素（获取并删除）
        // $x = $redis->lPop('lists');
        // echo $x . PHP_EOL;
        // 从右侧出队一个元素（获取并删除）
        // $z = $redis->rPop('lists');
        // echo $z . PHP_EOL;
        // 获取左侧第一个元素
        // $y = $redis->lIndex('lists', 0);
        // echo $y . PHP_EOL;
        // 删除队列
        // $redis->del('lists');

        // 创建集合
        // $redis->sAdd('sets', 'value1', 'value2', 'value23', 'value24', 'value25', 'value267');
        // 以数组形式创建集合
        // $array2[0] = 1;
        // $array2[1] = 12;
        // $array2[2] = 13;
        // $a = $redis->sAddArray('sets2', $array2);
        // 取两个集合的并集
        // $union = $redis->sUnion('sets', 'sets2');
        // 取两个集合的差集
        // $diff = $redis->sDiff('sets', 'sets2');
        // 取两个集合的交集
        // $inter = $redis->sInter('sets', 'sets2');
        // var_dump($union, $diff, $inter);
       
       
        // 获取集合数量
        // $card = $redis->sCard('sets');
        // echo $card . PHP_EOL;
        
        // 获取集合中全部元素
        // 不推荐使用这种方法获取全部数据，会导致服务器执行超时，推荐方法后边会详细介绍
        // $sets = $redis->sMembers('sets');
        // var_dump($sets);

        // 判断元素是否是集合中的成员
        // $isMember = $redis->sIsMember('sets', 'value2');
        // var_dump($isMember);

        // 删除集合中的元素
        // $redis->sRem('sets', 'value2');
        // var_dump($redis->sMembers('sets'));

        // 随机获取一个元素
        // echo $redis->sRandMember('sets');

        // 随机获取一个元素并从集合中删除
        // echo $redis->sPop('sets');

        // 删除集合
        // $redis->del('sets', 'sets2');

        // 添加成员
        // $redis->zAdd('zset', 95, '小明');
        // $redis->zAdd('zset', 99, '小刚');
        // $redis->zAdd('zset', 100, '小红');
        // 统计成员个数
        // echo $redis->zCard('zset') . PHP_EOL;
        // 获取某个成员的分数
        // $score = $redis->zScore('zset', '小明');
        // echo $score . PHP_EOL;

        // 获取某个成员的排名
        // $rank = $redis->zRank('zset', '小明'); // 从低到高排序的名次
        // $revRank = $redis->zRevRank('zset', '小明'); // 从高到低排序的名次
        // echo $rank . PHP_EOL;
        // echo $revRank . PHP_EOL;

        // 给指定成员增加分数
        // $redis->zIncrBy('zset', 1, '小明'); // 给小明加一分

        // 返回指定排名范围的成员
        // $range = $redis->zRange('zset', 0, 9, true); // 返回分数从低到高排序的前10名及分数
        // $revRange = $redis-> zRevRange('zset', 0, 9, true); // 返回分数从高到低排序的前10名及分数
        // var_dump($range);
        // var_dump($revRange);

        // 删除成员
        // $redis->zRem('zset', '小明');

        // 返回指定分数范围的成员
        // $rangeByScore = $redis->zRangeByScore('zset', 98, 100); // 返回指定分数范围内从低到高排序的成员
        // $revRangeByScore = $redis->zRevRangeByScore('zset', 100, 98); // 返回指定分数范围内从高到低排序的成员
        // var_dump($rangeByScore);
        // var_dump($revRangeByScore);
        $this->success('返回成功');
    }

    /**
     * 无需登录的接口
     *
     */
    public function test1()
    {
        $this->success('返回成功', ['action' => 'test1']);
    }

    /**
     * 需要登录的接口
     *
     */
    public function test2()
    {
        $sortlast_copy = Db::name('dxm_sortlast_copy')->select();
        foreach ($sortlast_copy as $sort) {
            $update['image'] = $sort['image'].'" height=50 width=50></table>';
            $return = Db::name('dxm_sortlast_copy')->where('id',$sort['id'])->update($update);
        }
        $this->success('返回成功',$return);
    }

    /**
     * 需要登录且需要验证有相应组的权限
     *
     */
    public function test3()
    {
        $this->success('返回成功', ['action' => 'test3']);
    }

    public function dxm_sortlast()
    {
        $dxm_sort = Db::name('dxm_sort')
            ->where('change',0)
            ->order('changetime asc')
            ->limit('1000')
            ->select();
        if (!empty($dxm_sort)) {
            $return2 = array();
            foreach ($dxm_sort as $sort) {
                $sort['image'] = trim($sort['image']);
                $sort['sku'] = trim($sort['sku']);
                $dxm_sortlast = Db::name('dxm_sortlast')
                    ->where('sku',$sort['sku'])
                    ->find();
                $return = array();
                if (!empty($dxm_sortlast)) {
                    $sortlast_data = array();
                    $sortlast_data['num'] = $dxm_sortlast['num'] + $sort['num'];
                    $return = Db::name('dxm_sortlast')
                        ->where('sku',$sort['sku'])
                        ->update($sortlast_data);
                } else {
                    $sortlast_data = array();
                    $sortlast_data['specifications'] = $sort['specifications'];
                    $sortlast_data['num'] = $sort['num'];
                    $sortlast_data['sku'] = $sort['sku'];
                    //图片是一样的就是同一个商品
                    $dxm_sortlast_image = Db::name('dxm_sortlast')
                        ->where('image',$sort['image'])
                        ->find();
                    if (!empty($dxm_sortlast_image)) {
                        $sortlast_data['fproduct'] = $dxm_sortlast_image['id'];
                        $update_sortlast['fproduct'] = $sortlast_data['fproduct'];
                        Db::name('dxm_sortlast')
                            ->where('image',$sort['image'])
                            ->update($update_sortlast);
                    }else{
                        $sortlast_data['image'] = $sort['image'];
                        $sortlast_data['product'] = $sort['product'];
                    }
                    $return = Db::name('dxm_sortlast')->insert($sortlast_data);
                }
                $data2 = array();
                $data2['changetime'] = time();
                if (!empty($return)) {
                    $data2['change'] = 1;
                }
                $return2 = Db::name('dxm_sort')
                    ->where('id',$sort['id'])
                    ->update($data2);
            }
            $this->success('完成',$return2);
        } else {
            $this->success('没有数据');
        }
    }

}
